import numpy as np
import matplotlib.pyplot as plt

np.random.seed(42)
# 固定随机种子，使得每次都一样
X1= 2 * np.random.rand(100, 1)
# 有监督学习  X1 Y应该是真实值
# print(X1, len(X1))
Y= 5 + 4 * X1 + np.random.randn(100, 1)
# 公式：y=a+bx+loss=y^+loss
# print(Y)

X0=np.ones((100,1))
X01=np.c_[X0,X1]
# 公式：y=w0x0+w1x1+loss=w0+w1x1+loss,将全1的x0和x1拼接，求截距w0
Theta=np.linalg.inv(X01.T.dot(X01)).dot(X01.T).dot(Y)
# 解析解公式：X转置点乘X的逆点乘X转置点乘Y
print(Theta)
# Theta就是w0,w1向量，接近a,b

my_list=[0,2]
X_new=np.array(my_list)
X_new=X_new.reshape(2,1)
# print(X_new)
X_new_b=np.c_[np.ones((2,1)),X_new]
# print(X_new_b)
# 用一个X去预测Y^
Y_predict=X_new_b.dot(Theta)
#公式 Y^=Theta 点乘 X
print(Y_predict)

plt.plot(X_new,Y_predict,'r-')
plt.plot(X1,Y,'b.')
# r-红色线  b.蓝色点
plt.xlim((0,2))
plt.ylim((0,15))
# 限定x,y轴取值范围
plt.show()